from django.shortcuts import render
from django.views import View
from django.http import JsonResponse

# Paginator是一个分页器对象
# EmptyPage是一个异常表示空页
from django.core.paginator import Paginator, EmptyPage

from .models import SKU
from goods.utils import get_breadcrumb
# Create your views here.


# 商品列表数据
class ListView(View):

    def get(self, request, category_id):
        # 1、提取参数
        page = request.GET.get('page', 1)
        page_size = request.GET.get('page_size', 5)
        ordering = request.GET.get('ordering', '-create_time')
        # 2、校验参数,略
        # 3、业务数据处理 —— 查询
        # 3.1、依据ordering排序过滤
        skus = SKU.objects.filter(category_id=category_id, is_launched=True).order_by(ordering)
        # 3.2、依据page和pagei_size去分页过滤
        try:
            # TODO: 使用Django的分页器实现分页
            # (1)、构建一个分页器对象
            # Paginator(被分页的查询集，每页数量)
            paginator = Paginator(skus, per_page=page_size)
            # (2)、找对象里面的方法来获取分页结果
            # paginator.page(第几页)
            sub_skus = paginator.page(page) # sub_skus就是当前页查询子集
        except EmptyPage as e:
            return JsonResponse({'code': 400, 'errmsg': '无效页'})

        # 3.3、构建接口约定的响应参数
        sku_list = []
        for sku in sub_skus:
            # sku是SKU对象
            sku_list.append({
                'id': sku.id,
                'name': sku.name,
                'price': sku.price,
                'default_image_url': sku.default_image.url # 完整的图片链接
            })

        # TODO: 封装函数来获取
        breadcrumb = get_breadcrumb(category_id)

        # 4、构建响应
        return JsonResponse({
            'code': 0,
            'errmsg': 'ok',
            'list': sku_list,
            'count': paginator.num_pages, # 总页数
            'breadcrumb': breadcrumb
        })


# 热销商品
class HotGoodsView(View):

    def get(self, request, category_id):

        skus = SKU.objects.filter(
            category_id=category_id, is_launched=True
        ).order_by('-sales')

        # 准备热销商品数量2个
        hot_skus_list = skus[0:2] # 下标0和1这两条数据
        ret_list = []
        for sku in hot_skus_list:
            ret_list.append({
                'id': sku.id,
                'default_image_url': sku.default_image.url,
                'name': sku.name,
                'price': sku.price
            })

        return JsonResponse({
            'code': 0,
            'errmsg': 'ok',
            'hot_skus': ret_list
        })



# 商品搜索
# from haystack.views import SearchView

# class MySearchView(SearchView):

#     # 重写构造一个JsonResponse响应返回
#     def create_response(self):

#         # self.get_context()函数获取检索结果
#         context = self.get_context()
#         # context['query']用户搜索的关键词
#         # context['paginator']分页器对象
#         # context['paginator'].count搜索数量
#         # context['paginator'].num_pages总页数
#         # context['page']是一个Page对象封装了当前页结果
#         # context['page'].number第几页
#         # context['page'].object_list是一个列表，保存搜索的结果(每个结果是SearchResult对象)
#         # SearchResult对象里面有一个object属性，就是我们需要的SKU对象。

#         # 列表里面存放的是每一个搜索的结果即SKU数据
#         data_list = []
#         for result in context['page'].object_list:
#             # result是SearchResult对象
#             sku = result.object # 通过SearchResult对象object属性获取SKU对象
#             data_list.append({
#                 'id': sku.id,
#                 'name': sku.name,
#                 'price': sku.price,
#                 'default_image_url': sku.default_image.url,
#                 'searchkey': context['query'],
#                 'page_size': context['paginator'].num_pages, # 总页数
#                 'count': context['paginator'].count  # 总数量
#             })

#         return JsonResponse(data_list, safe=False)














